package com.sqlcheck.factory;

import com.sqlcheck.enums.GitPlatform;
import com.sqlcheck.service.GitApiService;
import com.sqlcheck.service.GitLabApiService;
import com.sqlcheck.service.impl.GiteeApiServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * Git API服务工厂
 * 根据Git平台类型获取对应的API服务实现
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class GitApiServiceFactory {

    private final GitLabApiService gitLabApiService;
    private final GiteeApiServiceImpl giteeApiService;

    /**
     * 根据Git平台获取对应的API服务
     * 
     * @param platform Git平台类型
     * @return 对应的Git API服务
     */
    public GitApiService getGitApiService(GitPlatform platform) {
        if (platform == null) {
            log.warn("Git平台类型为null，默认使用GitLab");
            return gitLabApiService;
        }

        switch (platform) {
            case GITLAB:
                return gitLabApiService;
            case GITEE:
                return giteeApiService;
            case GITHUB:
                // GitHub暂时不实现，使用GitLab兼容模式
                log.warn("GitHub API暂未实现，使用GitLab API");
                return gitLabApiService;
            default:
                log.warn("不支持的Git平台: {}，默认使用GitLab", platform);
                return gitLabApiService;
        }
    }

    /**
     * 根据Git平台名称获取对应的API服务
     * 
     * @param platformName Git平台名称
     * @return 对应的Git API服务
     */
    public GitApiService getGitApiService(String platformName) {
        if (platformName == null || platformName.trim().isEmpty()) {
            log.warn("Git平台名称为空，默认使用GitLab");
            return gitLabApiService;
        }

        try {
            GitPlatform platform = GitPlatform.valueOf(platformName.toUpperCase());
            return getGitApiService(platform);
        } catch (IllegalArgumentException e) {
            log.warn("无效的Git平台名称: {}，默认使用GitLab", platformName);
            return gitLabApiService;
        }
    }

    /**
     * 根据仓库URL判断Git平台并获取对应的API服务
     * 
     * @param repositoryUrl 仓库URL
     * @return 对应的Git API服务
     */
    public GitApiService getGitApiServiceByUrl(String repositoryUrl) {
        if (repositoryUrl == null || repositoryUrl.trim().isEmpty()) {
            log.warn("仓库URL为空，默认使用GitLab");
            return gitLabApiService;
        }

        String lowerUrl = repositoryUrl.toLowerCase();

        if (lowerUrl.contains("gitee.com")) {
            return giteeApiService;
        } else if (lowerUrl.contains("github.com")) {
            log.warn("GitHub API暂未实现，使用GitLab API");
            return gitLabApiService;
        } else {
            // 默认认为是GitLab或自建GitLab
            return gitLabApiService;
        }
    }

    /**
     * 获取所有支持的Git平台
     * 
     * @return 支持的Git平台数组
     */
    public GitPlatform[] getSupportedPlatforms() {
        return new GitPlatform[] { GitPlatform.GITLAB, GitPlatform.GITEE };
    }

    /**
     * 检查是否支持指定的Git平台
     * 
     * @param platform Git平台类型
     * @return 是否支持
     */
    public boolean isSupported(GitPlatform platform) {
        return platform == GitPlatform.GITLAB || platform == GitPlatform.GITEE;
    }
}